using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using Icono;

namespace Papeleta
{
    public partial class Papeleta : Form
    {
        Size pixImagen = new Size(320, 240);

        ArrayList textos = new ArrayList();
        ArrayList imagenes = new ArrayList();
        ArrayList archivos = new ArrayList();
                  
        
        public Papeleta()
        {
            InitializeComponent();       
                        
        }


        private void Papeleta_Load(object sender, EventArgs e)
        {
            limpiar(1);
            limpiar(2);
            
            textos.Add("0");
            textos.Add("1");
                       
        }

        private void cargarPapeles(int papel)
        {
            limpiar(papel);
            
            if (Clipboard.ContainsFileDropList())
                crearPapelArchivos(Clipboard.GetFileDropList(),papel);

            if (Clipboard.ContainsImage())
                crearPapelImagen(Clipboard.GetImage(),papel);

            if (Clipboard.ContainsText())
                crearPapelTexto(Clipboard.GetText(),papel);
                                    
        }
               

        private void alPortapapeles(string cosa, int indice)
        {
            Clipboard.Clear();
            
            if (cosa == "Texto")
            {                
                Clipboard.SetText(textos[indice].ToString());
            }

            if (cosa == "Imagen")
            {                
                Clipboard.SetImage((Image)imagenes[indice]);                
            }

            if (cosa == "Archivos")
            {
                Clipboard.SetFileDropList((System.Collections.Specialized.StringCollection)archivos[indice]);
            }       
                        
        }

        private string getPathArchivo(string archivo)
        {
            int hasta = archivo.LastIndexOf("\\");

            string path = archivo.Substring(0, hasta);

            return path;
        }


        private string getNombreArchivo(string path)
        {
            int desde = path.LastIndexOf("\\") + 1;

            string nombreArchivo = path.Substring(desde);

            return nombreArchivo;
        }
        
        private string getExtensionArchivo(string path)
        {
            int desde = path.LastIndexOf(".") + 1;
            int cant = path.Length - desde;
            
            return (path.Substring(desde,cant));
        }
                

        private void limpiar(int papel)
        {
            if (papel == 1)
            {
                try { grilla.Controls.RemoveAt(1); }
                catch { }
                header1.Text = "";
                infoArchivo1.Text = "";
            }
            else
            {
                try { grilla2.Controls.RemoveAt(1); }
                catch { }
                header2.Text = "";
                infoArchivo2.Text = "";
            }

        }      

        private void crearPapelArchivos(System.Collections.Specialized.StringCollection archivo,int papel)
        {
            limpiar(papel);

            ListView listaArchivos = new ListView();
            ImageList listaImagenes = new ImageList();

            listaArchivos.Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom | AnchorStyles.Top;
            listaArchivos.View = View.LargeIcon;
            listaImagenes.ImageSize = new Size(32, 32);
            listaArchivos.LargeImageList = listaImagenes;
                        
            foreach (string str in archivo)
            {
                //listaArchivos.Items.Add(getNombreArchivo(str));
                listaImagenes.Images.Add(IconExtract.GetIcon(str, false).ToBitmap());               
                 
            }

            for (int j = 0; j < listaImagenes.Images.Count; j++)
            {
                ListViewItem item = new ListViewItem();
                
                item.ImageIndex = j;
                item.Text = getNombreArchivo(archivo[j]);
                listaArchivos.Items.Add(item);
            }

            if (papel == 1)
            {
                try { archivos[0] = archivo; }
                catch { archivos.Add(archivo);}

                grilla.Controls.Add(listaArchivos, 0, 1);
                grilla.Controls.Add(header1, 0, 0);
                
                header1.Text = "Archivos";
                infoArchivo1.Text = getPathArchivo(archivo[0]);
                

            }
            else 
            {
                try { archivos[1] = archivo; }
                catch { archivos.Add(archivo); }
                
                grilla2.Controls.Add(listaArchivos,0,1);
                grilla2.Controls.Add(header2, 0, 0);                

                header2.Text = "Archivos";
                infoArchivo2.Text = getPathArchivo(archivo[0]);
            }

        }               

        private void crearPapelImagen(Image imagen,int papel)
        {
            limpiar(papel);                     

            PictureBox pbox = new PictureBox();
                        
            //Si es una imagen vertical la gira, sino no
            invertirImagen(imagen);

            //pbox.Location = new Point(6,19);
            pbox.Anchor= AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom | AnchorStyles.Top;
            pbox.Image = imagen;
            pbox.Size = pixImagen;

            if ((imagen.Size.Height > pixImagen.Height) || (imagen.Size.Width > pixImagen.Width))
                pbox.SizeMode = PictureBoxSizeMode.Zoom;
            else
                pbox.SizeMode = PictureBoxSizeMode.AutoSize;

            if (papel == 1)
            {

                grilla.Controls.Add(pbox,0,1);
                grilla.Controls.Add(header1, 0, 0);

                try { imagenes[0] = imagen; }
                catch { imagenes.Add(imagen); }

                header1.Text = "Imagen";

                infoArchivo1.Text = "";
            }
            else
            {
                grilla2.Controls.Add(pbox,0,1);
                grilla2.Controls.Add(header2, 0, 0);

                try { imagenes[1] = imagen; }
                catch
                {
                    imagenes.Add(imagen);
                    imagenes.Add(imagen);                    
                }

                header2.Text = "Imagen";

                infoArchivo2.Text = "";
            }            

        }

        private void crearPapelTexto(string texto,int papel)
        {
            limpiar(papel);

            RichTextBox rtb = new RichTextBox();
            Point coord = new Point(15,115);
            
            rtb.Location = coord;
            rtb.Text = texto;
            rtb.Anchor= AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom | AnchorStyles.Top;

            if (papel == 1)
            {

                grilla.Controls.Add(rtb,0,1);
                grilla.Controls.Add(header1, 0, 0);

                try { textos[0] = texto; }
                catch { textos.Add(texto); }

                header1.Text = "Texto";

                infoArchivo1.Text = "";
            }
            else
            {
                grilla2.Controls.Add(rtb,0,1);
                grilla2.Controls.Add(header2, 0, 0);

                try { textos[1] = texto; }
                catch { textos.Add(texto); }

                header2.Text = "Texto";

                infoArchivo2.Text = "";
            }
            
        }

        private void invertirImagen(Image imagen)
        {
            if (imagen.Size.Height > imagen.Size.Width)
            {
                pixImagen.Height = 320;
                pixImagen.Width = 240;
            }

        }        
        

        private void btnCopiar1_Click(object sender, EventArgs e)
        {
            alPortapapeles(header1.Text, 0);
        }

        private void btnBorrar1_Click(object sender, EventArgs e)
        {
            limpiar(1);
        }

        private void btnPegar1_Click(object sender, EventArgs e)
        {
            cargarPapeles(1);
        }

        private void btnCopiar2_Click(object sender, EventArgs e)
        {
            alPortapapeles(header2.Text, 1);
        }

        private void btnBorrar2_Click(object sender, EventArgs e)
        {
            limpiar(2);
        }

        private void btnPegar2_Click(object sender, EventArgs e)
        {
            cargarPapeles(2);
        }
        

        
        

        
    }
}




//REVISAR METODO "ALPORTAPAPELES"
//TRATAR DE HACERLO GENERICO, ALPORTAPAPELES(OBJECT)
//Y CONVERTIRLO DENTRO DEL METODO